#ifndef CPP_MULTIMEDIA_SERVICE_H
#define CPP_MULTIMEDIA_SERVICE_H

#include <cvte_multimedia_data.h>

//@brief 多媒体服务
//@author cvte
//@description 多媒体管理，设置和获取多媒体相关状态
class MultimediaService {
   public:
    class MultimediaServiceListener {
       public:
        virtual void onPlayerStatusChanged(CVTE_MULTIMEDIA_TYPE type, CVTE_MULTIMEDIA_STATUS_DATA* data);
    };
    static MultimediaService* getInstance();

    //@method 播放多媒体，path为文件绝对路径，type为多媒体类型，id为自定义标识，isLoop为是否要循环播放
    void play(const char *path, CVTE_MULTIMEDIA_TYPE type, int id, bool isLoop);
    //@method 设置音量 0 ～ 100
    void setVolume(unsigned int val);
    //@method 获取音量 0 ～ 100
    unsigned int getVolume();
    //@method 停止播放
    void stop(CVTE_MULTIMEDIA_TYPE type, int id);
    //@method 开始播放/继续播放
    void start(CVTE_MULTIMEDIA_TYPE type, int id);
    //@method 暂停播放
    void pause(CVTE_MULTIMEDIA_TYPE type, int id);
    //@method 音频服务睡眠，由于音频服务一直保留一个播放器，在A2DP工作时需要先关闭音频服务
    void sleep(void);
    //@method 音频服务唤醒
    void awaken(void);
    //@method 销毁播放器，在应用退出时调用
    void destroy(CVTE_MULTIMEDIA_TYPE type);
    //@method 获取播放状态数据
    CVTE_MULTIMEDIA_STATUS_DATA* getStatus(CVTE_MULTIMEDIA_TYPE type);

    //@method 通知处理
    void notifyProc(uint32_t id_notify, uint8_t *value);
    //@method 设置监听
    void setListener(MultimediaServiceListener& listener);

   private:
    static MultimediaService* sInstance;
    MultimediaServiceListener* mListener = nullptr;
    CVTE_MULTIMEDIA_STATUS_DATA mSystemAudioStatus;
    CVTE_MULTIMEDIA_STATUS_DATA mMediaAudioStatus;
    CVTE_MULTIMEDIA_STATUS_DATA mMediaVideoStatus;

    MultimediaService();
    virtual ~MultimediaService();
};
#endif